home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Java 3D API Specification (2nd Edition)
/
The Java 3D API Specification (2nd Edition).iso
/
programs
/
examples
/
AlternateAppearance
/
SphereGroup.java
< prev
Wrap
Text File
|
2000-04-28
|
4KB
|
110 lines
/*
* @(#)SphereGroup.java 1.3 00/02/10 13:13:38
*
* Copyright (c) 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
*
* Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
* modify and redistribute this software in source and binary code form,
* provided that i) this copyright notice and license appear on all copies of
* the software; and ii) Licensee does not utilize the software in a manner
* which is disparaging to Sun.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
* LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
* LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
* OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control of
* aircraft, air traffic, aircraft navigation or aircraft communications; or in
* the design, construction, operation or maintenance of any nuclear
* facility. Licensee represents and warrants that it will not use or
* redistribute the Software for such purposes.
*/
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
public class SphereGroup
extends Group
{
Shape3D[] shapes;
int numShapes = 0;
// Constructors
public SphereGroup( )
{
// radius x,y spacing x,y count appearance
this( 0.25f, 0.75f, 0.75f, 5, 5, null, false );
}
public SphereGroup( Appearance app )
{
// radius x,y spacing x,y count appearance
this( 0.25f, 0.75f, 0.75f, 5, 5, app, false );
}
public SphereGroup( float radius, float xSpacing, float ySpacing,
int xCount, int yCount, boolean overrideflag )
{
this( radius, xSpacing, ySpacing, xCount, yCount, null, overrideflag );
}
public SphereGroup( float radius, float xSpacing, float ySpacing,
int xCount, int yCount, Appearance app, boolean overrideflag )
{
if ( app == null )
{
app = new Appearance( );
Material material = new Material( );
material.setDiffuseColor( new Color3f( 0.8f, 0.8f, 0.8f ) );
material.setSpecularColor( new Color3f( 0.0f, 0.0f, 0.0f ) );
material.setShininess( 0.0f );
app.setMaterial( material );
}
double xStart = -xSpacing * (double)(xCount-1) / 2.0;
double yStart = -ySpacing * (double)(yCount-1) / 2.0;
Sphere sphere = null;
TransformGroup trans = null;
Transform3D t3d = new Transform3D( );
Vector3d vec = new Vector3d( );
double x, y = yStart, z = 0.0;
shapes = new Shape3D[xCount * yCount];
for ( int i = 0; i < yCount; i++ )
{
x = xStart;
for ( int j = 0; j < xCount; j++ ) {
vec.set( x, y, z );
t3d.setTranslation( vec );
trans = new TransformGroup( t3d );
addChild( trans );
sphere = new Sphere(
radius, // sphere radius
Primitive.GENERATE_NORMALS, // generate normals
16, // 16 divisions radially
app ); // it's appearance
trans.addChild( sphere );
x += xSpacing;
shapes[numShapes] = sphere.getShape();
if (overrideflag)
shapes[numShapes].setCapability(Shape3D.ALLOW_APPEARANCE_OVERRIDE_WRITE);
numShapes++;
}
y += ySpacing;
}
}
Shape3D[] getShapes() {
return shapes;
}
}